<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var obj = {
            name: 'lilei'
        }
        //1.先让年龄隐姓埋名,并且半隐藏
        Object.defineProperties(obj, {
            //如果以前对象就已经有了这个属性,就修改
            //否则如果没有这个属性,就自动添加
            _age: {
                value: 21,
                writable: true,//可以做修改
                enumerable: false,//半隐藏
                configurable: false
            },
            //2.请保镖,一对
            age: {//冒名顶替受保护的数据属性
                get: function () {
                    console.log(`自动条用了一次obj的get()方法来获取值`)
                    // console.log(`get()中this指向${this}`)
                    return this._age;
                },
                set: function (value) {//代替_age中writable开关,值是可以修改的
                    //value会自动接收到要赋值的新值
                    console.log(`自动调用了一次obj的set()方法,获得的value值为${value}`)
                    if (value >= 18 && value <= 65) {
                        console.log(`value的值为${value},通过验证,进行赋值保存到obj中`)
                        // console.log(`set()中this指向${this}`)
                        this._age = value;
                    } else {
                        console.log(`value的值为${value},不符合要求,所以报错`)
                        throw Error("年龄介于18到65之间!")
                    }
                },
                enumerable: true,//顶替受保护的属性,抛头露面
                configurable: false//不能随便删除保镖
            }
        })
        console.log(obj)
        obj.age = obj.age++;
        // console.log(obj)
        // obj.age = -2;
        // console.log(obj)
    </script>
</body>

</html>